package org.skywork.gui.system;

// *************************************************************************/
// Charada Soft
// Area de Desarrollo de Sistemas de Información
// *************************************************************************/
// Proyecto : SkyWork
// Archivo : SystemGUI.java
// Descripcion : Clase SystemGUI
// *************************************************************************/
// Version : 2.11.8
// Fecha de Creación: 01 de Enero de 2015
// Author : Daniel Andres Castillo Pedroza
// *************************************************************************/

import java.awt.Color;
import java.awt.Font;
import javax.swing.ListCellRenderer;
import javax.swing.SwingConstants;
import org.swing.objects.BorderShadow;
import org.swing.objects.Visual;
import org.swing.objects.list.ListRendererBasic;
import org.swing.optionpane.MessagePane;
import org.tools.Result;

public class SystemGUI {
    
    // Atributos estáticos de la clase SystemGUI
    
    private static final Font FONT_CONTROL = new Font("Open Sans Light",Font.PLAIN,14);
    private static final Color FONT_COLOR_CONTROL = Color.BLACK;
    
    private static final String TITLE_MESSAGE = "SkyWork 2.11.8 - Mensaje del Sistema";
    
    // Metodos estáticos de la clase SystemGUI
    
    /**
     * Este método tiene la configuración visual de una etiqueta por Defecto.
     * 
     * @return Retorna el configurador visual en un objeto <code>Visual</code>.
     */
    public static Visual getLabel()  {
        return getLabel(FONT_COLOR_CONTROL);
    }
    
    /**
     * Este método tiene la configuración visual de una etiqueta, 
     * determinando el color de la fuente. Donde el color se establece 
     * con un objeto <code>Color</code>.
     * 
     * @param color Color de la fuente de la Etiqueta
     * @return Retorna el configurador visual en un objeto <code>Visual</code>.
     */
    public static Visual getLabel(Color color)  {
        Visual visual = new Visual(); visual.setAlignment(SwingConstants.LEFT);
        visual.setFont(FONT_CONTROL); visual.setForeground(color);
        
        return visual; // Retornando aspecto Visual de las Etiquetas
    }
    
    /**
     * Este método tiene la configuración visual de una caja de texto por Defecto.
     * 
     * @return Retorna el configurador visual en un objeto <code>Visual</code>.
     */
    public static Visual getTextBox() {
        return getTextBox(true);
    }
    
    /**
     * Este método tiene la configuración visual de una caja de texto, 
     * determinando el estado del componente. Donde el estado se establece 
     * con un dato <code>boolean</code>.
     * 
     * @param state Estado del componente
     * @return Retorna el configurador visual en un objeto <code>Visual</code>.
     */
    public static Visual getTextBox(boolean state)  {
        Visual visual = new Visual(); visual.setAlignment(SwingConstants.CENTER);
        visual.setFont(FONT_CONTROL); visual.setForeground(Color.BLACK); 
        visual.setState(state);
        
        return visual; // Retornando aspecto Visual de los TextBox
    }
    
    /**
     * Este método tiene la configuración visual de un componente, 
     * determinando el estado del componente. Donde el estado se establece 
     * con un dato <code>boolean</code>.
     * 
     * @param state Estado del componente
     * @return Retorna el configurador visual en un objeto <code>Visual</code>.
     */
    public static Visual getComponents(boolean state) {
      Visual visual = new Visual(); visual.setState(state);
      visual.setFont(FONT_CONTROL); visual.setForeground(Color.BLACK); 
      visual.setAlignment(SwingConstants.LEFT);
      
      return visual; // Retornando aspecto Visual de los Componentes
    }
    
    /**
     * Este método nos permite mostrar el mensaje del resultado de un
     * proceso del Sistema. Donde el configurador del mensaje se establece con
     * un objeto <code>Result</code>.
     * 
     * @param result Objeto para configurar el mensaje a mostrar
     */
    public static void showMessage(Result result) {
        switch (result.getCode()) {
            // Mensaje de Correcto
            case (Result.CORRECT) :
                MessagePane.showInformationPane(TITLE_MESSAGE,result.getMessage(),getLabel());
            break;
            
            // Mensaje de Error
            case (Result.ERROR) :
                MessagePane.showErrorPane(TITLE_MESSAGE,result.getMessage(),getLabel());
            break;
            
            // Mensaje de Información
            case (Result.INFORMATION) :
                MessagePane.showInformationPane(TITLE_MESSAGE,result.getMessage(),getLabel());
            break;
            
            // Mensaje de Advertencia
            case (Result.WARNING) :
                MessagePane.showWarningPane(TITLE_MESSAGE,result.getMessage(),getLabel());
            break;
        }
    }
    
    /**
     * 
     * @param message
     * @param code 
     */
    public static void showMessage(String message, int code) {
        switch (code) {
            // Mensaje de Correcto
            case (Result.CORRECT) :
                MessagePane.showInformationPane(TITLE_MESSAGE,message,getLabel());
            break;
            
            // Mensaje de Error
            case (Result.ERROR) :
                MessagePane.showErrorPane(TITLE_MESSAGE,message,getLabel());
            break;
            
            // Mensaje de Información
            case (Result.INFORMATION) :
                MessagePane.showInformationPane(TITLE_MESSAGE,message,getLabel());
            break;
            
            // Mensaje de Advertencia
            case (Result.WARNING) :
                MessagePane.showWarningPane(TITLE_MESSAGE,message,getLabel());
            break;
        }
    }
 
    /**
     * 
     * @return 
     */
    public static ListCellRenderer getCellRenderer() {
        ListRendererBasic renderer = new ListRendererBasic();
        renderer.setVisual(getTextBox(true));
        renderer.setSize(0,30); renderer.setBorderFocus(new BorderShadow());
        
        return renderer; // Configuración de celda para las Listas
    }
}